Skip to main content

Global ID Validation

Check an identity outside Nigeriaโ€‹

You have details for a customer โ€” their name, date of birth, address, maybe a national ID number. This endpoint tells you whether those details are real and belong together, by comparing them against government, authoritative and commercial data sources in the customer's country.

POST /api/v1/id-verifications/identity/global/validate

Authenticate with your API key (x-api-key) or a bearer token, as with every other identity endpoint.

How it differs from the Nigerian checksโ€‹

The Nigerian checks (NIN, vNIN, BVN) are lookups: you send one ID number and get that person's record back.

This endpoint is a comparison. There is no single ID to look up in most countries, so you send everything you know about the person and get back a field-by-field verdict โ€” which details matched, which did not, and how confident the sources are overall.

Three steps to your first callโ€‹

  1. Find your customer's country in Country coverage and note the fields it requires.
  2. Send those fields, plus countryCode and isSubjectConsent: true. Anything extra you know is welcome โ€” more inputs mean a more meaningful match score.
  3. Read validationDetails in the response to see how each field scored.

Request bodyโ€‹

Only countryCode and isSubjectConsent are required on every request. The rest are optional in general โ€” but your customer's country will require some of them.

NameTypeDescription
countryCode*StringISO 3166-1 alpha-2 country code for the validation. Must match the ID issuing country. The table in Country coverage lists every code.
isSubjectConsent*BooleanIndicates the subject has given consent. Must be true.
idStringCandidate's national ID. Required for some countries โ€” see Country coverage.
firstNameStringFirst name to compare against the ID and/or credit file.
lastNameStringLast name to compare against the ID and/or credit file.
fullNameStringFull name to compare against the ID and/or credit file. firstName + lastName are accepted wherever fullName is required.
dateOfBirthStringDate of birth, YYYY-MM-DD.
mobileStringPhone number to compare against the ID and/or credit file.
emailStringEmail address.
advancedBooleanSearch multiple data sources simultaneously for wider coverage. Not offered in every country โ€” see Advanced search.
addressDetailsObjectAddress object.

addressDetailsโ€‹

NameTypeDescription
addressLine1StringAddress line to compare against the ID and/or credit file. Assembled from houseNumber + street when omitted.
addressLine2StringSecond address line.
houseNumberStringHouse or street number.
streetStringStreet or thoroughfare name.
cityStringCity or locality.
postalCodeStringPostal or ZIP code.
stateStringState or province.
countryCodeStringISO 3166-1 alpha-2 code of the address. Defaults to the top-level countryCode.

Country coverageโ€‹

Every country asks for a different set of details. Find your customer's country below and send the fields listed for it โ€” that is the minimum for the check to run.

FraudSpect validates these before calling the provider, so a request missing a required field fails instantly with 400 and costs you no credit.

Send more than the minimum

The required fields are the floor, not the target. Every extra detail you send is another field scored in validationDetails, which makes the result far more useful.

What each country requiresโ€‹

CountryCodeIdentity fieldsAddress fields (in addressDetails)Advanced search
ArgentinaARid, firstName, lastNameโ€”Yes
AustraliaAUfirstName, lastNamehouseNumber, street, postalCode, stateYes
AustriaATfirstName, lastNamehouseNumber, street, city, postalCode, stateYes
BelgiumBEfirstName, lastName, dateOfBirthโ€”Yes
BrazilBRid, fullNameโ€”Yes
CanadaCAfirstName, lastNamehouseNumber, street, postalCode, stateYes
ChileCLid, fullName, dateOfBirthโ€”Yes
ChinaCNid, fullNameโ€”Yes
ColombiaCOid, fullNameโ€”Yes
Czech RepublicCZfirstName, lastNamecityNo
DenmarkDKidโ€”Yes
FinlandFIid, firstName, lastNameโ€”Yes
FranceFRfirstName, lastNameaddressLine1, houseNumber, city, postalCodeYes
GermanyDEfirstName, lastNamehouseNumber, street, city, postalCodeYes
GhanaGHโ€”โ€”No
GibraltarGIfirstName, lastNameโ€”No
GreeceGRโ€”โ€”No
Hong KongHKfirstName, lastName, dateOfBirthโ€”No
IndiaINidโ€”Yes
IrelandIEfirstName, lastName, dateOfBirthhouseNumber, street, city, postalCode, stateNo
ItalyITfirstName, lastNamehouseNumber, street, city, postalCode, stateYes
JapanJPfirstName, lastNameโ€”No
KenyaKEโ€”โ€”No
LuxembourgLUfirstName, lastNameโ€”No
MalaysiaMYid, firstName, lastName, dateOfBirthcity, postalCode, stateNo
MexicoMXidโ€”Yes
NetherlandsNLfirstName, lastName, dateOfBirthhouseNumber, postalCodeYes
New ZealandNZfirstName, lastNamehouseNumber, street, city, postalCodeYes
NigeriaNGโ€”โ€”No
NorwayNOid, firstName, lastName, mobilehouseNumber, city, postalCodeYes
PhilippinesPHfirstName, lastName, dateOfBirth, mobileโ€”Yes
PolandPLfirstName, lastNamehouseNumber, street, city, postalCodeYes
PortugalPTfirstName, lastNamehouseNumber, street, city, postalCodeYes
SingaporeSGid, fullName, dateOfBirthโ€”No
SlovakiaSKfirstName, lastNamecityNo
South AfricaZAidโ€”Yes
SpainESfirstName, lastNamestreet, postalCodeNo
SwedenSEidโ€”Yes
SwitzerlandCHfirstName, lastNamepostalCodeNo
ThailandTHโ€”โ€”No
TurkeyTRid, firstName, lastName, dateOfBirthโ€”No
United KingdomGBfirstName, lastNameaddressLine1, city, postalCodeNo
United StatesUSid, firstName, lastNameaddressLine1, city, postalCodeYes

Reading this table

  • Identity fields go at the root of the request body. Address fields go inside addressDetails.
  • โ€” means nothing is required beyond countryCode and isSubjectConsent.
  • Wherever fullName is listed, firstName + lastName work just as well โ€” we join them for you.
  • Wherever addressLine1 is listed, houseNumber + street work just as well.
  • Your country is not listed? It is still supported. It simply has no mandatory field beyond countryCode and isSubjectConsent.
  • An empty string counts as not sending the field at all. "state": "" will not satisfy a country that requires state โ€” send a real value or expect a 400.
Two country quirks

Malaysia wants only the last 4 digits of the national ID, not the whole number. Spain coverage includes the Canary Islands, Ceuta and Melilla.

Setting advanced: true widens the search across several data sources at once, for better coverage and accuracy. Not every country offers it โ€” check the Advanced search column above.

If you set it for a country marked No, the request returns 400. We would rather tell you than quietly run a narrower search than the one you asked for.


Sample requestโ€‹

{
"countryCode": "AU",
"isSubjectConsent": true,
"firstName": "TOM",
"lastName": "CLARKE",
"dateOfBirth": "1990-01-01",
"advanced": true,
"addressDetails": {
"houseNumber": "19",
"street": "CASUARINA",
"city": "KILMORE",
"postalCode": "3764",
"state": "VIC"
}
}

Response โ€” Successfulโ€‹

{
"message": "Successfull!",
"status": 200,
"code": "info",
"data": {
"id": "9f1c2b7e-4c31-4d0f-9d2a-6b1f0c8e5a11",
"documentType": "GLOBAL_EIDV",
"documentCountry": "AU",
"documentId": "12345678",
"fullName": "TOM CLARKE",
"requestAt": "2026-08-10T09:00:00.000Z",
"requestUpdatedAt": "2026-08-10T09:00:00.000Z",
"requestedBy": {
"id": "7c2e1a44-0f3b-4a8d-91c6-2d4e5f6a7b88",
"firstName": "API",
"lastName": "User"
},
"firstName": "TOM",
"lastName": "CLARKE",
"dateOfBirth": "1990-01-01",
"mobile": "",
"email": "",
"addressDetails": {
"addressLine1": "19 CASUARINA",
"houseNumber": "19",
"street": "CASUARINA",
"city": "KILMORE",
"postalCode": "3764",
"state": "VIC",
"countryCode": "AU"
},
"validationDetails": {
"fullName": {
"status": "partial_matched",
"value": "TOM CLARKE",
"validationMessage": "Partial match made on Complete Name"
},
"lastName": {
"status": "full_matched",
"value": "CLARKE",
"validationMessage": "Full match made on Last Name/Surname"
},
"city": {
"status": "full_matched",
"value": "KILMORE",
"validationMessage": "Full match made on City/Locality"
},
"postalCode": {
"status": "full_matched",
"value": "3764",
"validationMessage": "Full match made on Postal Code/Zip Code"
},
"dateOfBirth": {
"status": "not_matched",
"value": "1990-01-01",
"validationMessage": "No match made on Date of Birth"
},
"percentage": {
"percentageFullyMatched": 36,
"percentageNotMatched": 40,
"percentagePartialMatched": 24
}
},
"addressReliability": { "reliability": "10", "adaptation": "30" },
"identityReliability": { "reliability": "30", "adaptation": "0" },
"overallReliability": { "reliability": "30", "adaptation": "30" },
"dataValidation": true,
"isConsent": true,
"status": "found",
"reason": null,
"identityNumber": "12345678",
"country": "AU",
"advanced": true
}
}

Reading the resultโ€‹

FieldWhat it tells you
statusfound when the subject was located in a data source, not_found otherwise.
validationDetailsPer-field outcome โ€” full_matched, partial_matched or not_matched โ€” with a human-readable message. Which keys appear depends on the country and on what you submitted.
percentageShare of the submitted fields that fully, partially and did not match.
identityReliabilityConfidence in the identity match.
addressReliabilityConfidence in the address match.
overallReliabilityCombined confidence across identity and address.
Repeat checks

Results are stored against documentId + country. Re-running a check for the same person in the same country updates the existing record rather than creating a duplicate, so the record id stays stable across retries.


Error Responsesโ€‹

HTTP/1.1 400 Bad Request โ€” missing country-required fieldโ€‹

Raised before the provider is called, so no credit is charged. See Country coverage for what each country requires.

{
"message": "US global identity validation requires: id, addressDetails.addressLine1 (or addressDetails.houseNumber and addressDetails.street), addressDetails.city, addressDetails.postalCode.",
"error": "Bad Request",
"statusCode": 400
}

HTTP/1.1 400 Bad Request โ€” advanced search unavailableโ€‹

Also raised before the provider is called. No credit is charged. See Advanced search.

{
"message": "Advanced search is not available for GB. Retry without \"advanced\".",
"error": "Bad Request",
"statusCode": 400
}

HTTP/1.1 400 Bad Request โ€” invalid payloadโ€‹

Body validation failures return every problem at once, as an array.

{
"message": [
"isSubjectConsent must be true to run a global identity validation",
"countryCode must be an ISO 3166-1 alpha-2 code",
"dateOfBirth must be in the format YYYY-MM-DD"
],
"error": "Bad Request",
"statusCode": 400
}

HTTP/1.1 400 Bad Request โ€” insufficient creditโ€‹

{
"message": "Insufficient credit",
"error": "Bad Request",
"statusCode": 400
}

HTTP/1.1 403 Forbiddenโ€‹

Returned when your API key or user lacks the KYC verification permissions.

{
"message": "You cannot run this KYC verification check",
"error": "Forbidden",
"statusCode": 403
}

HTTP/1.1 400 Bad Request โ€” service disabledโ€‹

The Identity Verification module is not enabled for your organisation. Contact support.

{
"message": "Id verification service is disabled for organization",
"error": "Bad Request",
"statusCode": 400
}